<template>
	<view>
		<u-action-sheet 
			:actions="mapList" 
			:show="show" 
			:closeOnClickOverlay="true" 
			:closeOnClickAction="true"
			cancelText="取消"
			@close="show = false"
			@select="changeMap"></u-action-sheet>
	</view>
</template>

<script>
	export default {
		name: 'mapSelector',
		props: {
			// 是否显示选择菜单
			visible: {
				type: Boolean,
				default: false
			},
			// 地点标题
			title: {
				type: String,
				default: ''
			},
			// 纬度
			latitude: {
				type: [String, Number],
				default: ''
			},
			// 经度
			longitude: {
				type: [String, Number],
				default: ''
			},
			// 详细地址（可选）
			address: {
				type: String,
				default: ''
			}
		},
		data() {
			return {
				show: false,
				mapList: [
					// {
					// 	id: 'gaode',
					// 	name: '高德地图'
					// },
					{
						id: 'baidu',
						name: '百度地图'
					},
				]
			}
		},
		watch: {
			visible: {
				handler(newVal) {
					this.show = newVal;
				},
				immediate: true
			},
			show(newVal) {
				this.$emit('update:visible', newVal);
			}
		},
		methods: {
			// 选择地图
			changeMap(data) {
				this.show = false;
				// 目标经纬度，标题
				let lat = Number(this.latitude);
				let lng = Number(this.longitude);
				let title = this.title;
				let url = '';
				let id = data.id;
				
				if (id == 'gaode') {
					// 高德地图
					url = `https://uri.amap.com/marker?position=${lng},${lat}&name=${title}&src=mypage&coordinate=gaode&callnative=1`;
				} else if (id == 'baidu') {
					// 百度地图
					let baiduUrl = `marker?location=${lat},${lng}&title=${title}&content=${title}`;
					url = `https://api.map.baidu.com/${baiduUrl}&output=html&src=webapp.baidu.openAPIdemo`;
				}
				
				// 根据不同端处理
				this.handleMapNavigation(url, lat, lng, title, id);
			},
			
			// 处理地图导航
			handleMapNavigation(url, lat, lng, title, id) {
				// 修改app端跳转方案，使用url Scheme 跳转，并携带目标地址经纬度和标题。
				// #ifdef APP
				this.openNativeMap(lat, lng, title, id);
				// #endif
				
				// #ifdef H5
				location.href = url;
				// #endif
				
				// #ifdef MP-WEIXIN
				this.openWeixinMap(lat, lng, title);
				// #endif
			},
			
			// APP端打开原生地图应用
			openNativeMap(lat, lng, title, id) {
				console.log(lat, lng, title, id, 'lat, lng, title, index===>');
				let schemeUrl = '';
				let fallbackUrl = '';
				
				if (id == 'gaode') {
					// 高德地图 - 使用正确的URL Scheme
					const encodedTitle = encodeURIComponent(title);
					schemeUrl = `iosamap://navi?sourceApplication=runyukang&poiname=${encodedTitle}&lat=${lat}&lon=${lng}&dev=0&style=2`;
					// Android高德地图备用方案
					fallbackUrl = `androidamap://navi?sourceApplication=runyukang&poiname=${encodedTitle}&lat=${lat}&lon=${lng}&dev=0&style=2`;
				} else if (id == 'baidu') {
					// 百度地图 - 使用正确的URL Scheme格式
					// 需要包含origin和destination参数，格式：latlng:纬度,经度|name:名称
					const encodedTitle = encodeURIComponent(title);
					schemeUrl = `baidumap://map/direction?origin=我的位置&destination=latlng:${lat},${lng}|name:${encodedTitle}&mode=driving&src=runyukang`;
					fallbackUrl = `https://api.map.baidu.com/marker?location=${lat},${lng}&title=${encodedTitle}&content=${encodedTitle}&output=html&src=webapp.baidu.openAPIdemo`;
				}
				
				// 尝试打开原生应用
				plus.runtime.openURL(schemeUrl, (error) => {
					console.log('原生应用打开失败:', error);
					// 如果原生应用打开失败，尝试备用方案
					if (index == 'gaode') {
						// 高德地图备用方案
						plus.runtime.openURL(fallbackUrl, (error2) => {
							console.log('高德地图备用方案也失败:', error2);
							// 最后尝试web版本
							const encodedTitle = encodeURIComponent(title);
							plus.runtime.openURL(`https://uri.amap.com/marker?position=${lng},${lat}&name=${encodedTitle}&src=mypage&coordinate=gaode&callnative=1`);
						});
					} else {
						// 百度地图直接使用web版本
						plus.runtime.openURL(fallbackUrl);
					}
				});
			},
			
			// 微信小程序端打开地图
			openWeixinMap(latitude, longitude, title) {
				let address = this.address || title;
				
				// 获取定位信息
				uni.getLocation({
					type: 'wgs84', // 返回可以用于uni.openLocation的经纬度
					// 用户允许获取定位
					success: (res) => {
						console.log(res, '经纬度===>');
						if (res.errMsg == "getLocation:ok") {
							uni.openLocation({
								latitude: latitude,
								longitude: longitude,
								address: address,
								// 缩放大小
								scale: 18,
								success: function() {
									console.log('成功的回调success');
								}
							});
						}
					},
					// 用户拒绝获取定位后 再次点击触发
					fail: (res) => {
						console.log(res);
						if (res.errMsg == "getLocation:fail auth deny") {
							uni.showModal({
								content: '检测到您没打开获取信息功能权限，是否去设置打开？',
								confirmText: "确认",
								cancelText: '取消',
								success: (res) => {
									if (res.confirm) {
										uni.openSetting({
											success: (res) => {
												console.log('确定');
											}
										});
									} else {
										console.log('取消');
										return false;
									}
								}
							});
						}
					}
				});
			}
		}
	}
</script>

<style scoped lang="scss">
	// 组件样式（如果需要的话）
</style>
